from os import urandom
from gmpy2 import next_prime
from Crypto.Util.number import getPrime
import libnum
import uuid

flag="flag{"+str(uuid.uuid4())+"}"
print(flag)
m=libnum.s2n(flag.encode() + urandom(80))
p = getPrime(512)
q = next_prime(p)
n=p*q

n = 156853895847604116708242664263151514811095704969640303272039451331791888050995073274981545693518063639560286348739938318495685137088495867703518198511200409009953879436648706837731243061114851474801565873584183542649886358523850682697732574913523360866915083642887238043256280849100274825940626065115676325169
c = 3459715117165130065996389169943285249501133832272446001239391765859259811270526185228996906338576254353123756173289118671028939933226544773197852424767051933844004667155191851195814295922794480300237399956789038592856532530692732011427288405114650955620859282144504446058845961744702163836107847961388150810

m= 14981602525034050299417656518930331034375273850824063022793590510218965719638916240182274302579140149875840355261210374817502865770981779768906329411116045334873992087104051808984779213018310354188712008060149650003203454271325667357063473172627212697953788399073249865308674817432406716890899562081136084467
mm= 3489961750004563286296090156355696448603691237511949711618925106165513188826379711779092422741878704358648031925363761453840442628489630624101261039752954731095262370600026461875426097385583945640450698542013733885010384108565564827203573189712067537437533715603214298739135726785097454801555676308907
p= 12524132538727147976454683542869473176723933298740764667643646868771435739017779964538584767004546975861773724104399289331497224456192089483187179727966053
q= 12524132538727147976454683542869473176723933298740764667643646868771435739017779964538584767004546975861773724104399289331497224456192089483187179727966173
m1= 9287960027582580878259187484477660508216283374713118398353025237764689382914392900787987896078298742955899704633969005809427261778272378219224219600952309
m2= 9287926588507363049992024158244423789759185171810500035238656369884710922144221417971227556387748474762640693489773465234190092713112661506191356506460389


m11=mm%p
m22=mm%q

m32=m22*(-1)%q
m31=m11*(-1)%p
for i in range(q-p,p,-1):
    m32=m32*i%n
# for i in range(1, p):
#     k = (k * i) % n

m4=libnum.solve_crt([m31,m32],[p,q])
print(m11==m1)
print(m22==m2)
print(m32==m)
print(m31==m)
print(m4==m)



e = 65537
c = pow(m, e, n)*pow(m11,e,n)%n
print("n=",n)
print("c=",c)
